/*
 * Player.h
 *
 *  Created on: 10/08/2010
 *      Author: alex
 */

#ifndef MOVINGOBJECT_H_
#define MOVINGOBJECT_H_

#include "GameObject.h"
#include "components/Animation.h"


enum PlayerStatus {
	PLAYER_STOPPED, PLAYER_MOVING, PLAYER_FIRING, PLAYER_DEFENDING, PLAYER_HITTED
};


class Player: public GameObject {

public:

	Player(const std::string& stopped, const std::string& moving,
			const std::string& firing, const std::string& defending,
			const std::string& hitted, unsigned myNumber);

	virtual void render(SDL_Surface* screen);

	Player& bounce(unsigned dt, double angle, float speed);

	Player& setAngle(double angle) {
		this->angle = angle;
		return *this;
	}

	Player& setSpeed(float speed) {
		this->speed = speed;
		return *this;
	}

	float getSpeed() const {
		return speed;
	}

	double getAngle() const {
		return angle;
	}

protected:

	/**
	 * Move o objeto na direção em que ele está olhando.
	 *
	 * @param dt Intevalo de tempo passado desde a última atualização.
	 * @param acc Aceleração com que o objeto irá se mover.
	 */
	void move(int dt, float acc = 0);

	/**
	 * Freia o objeto.
	 *
	 * @param dt Intervalo de tempo passado.
	 * @param acc Aceleração com que o objeto irá freiar.
	 */
	void stop(int dt, float acc = 10.0);

	void rotate(int dt, float incAngle);

	PlayerStatus status;

	/**
	 * Ângulo da direção para qual o objeto está olhando/apontando.
	 */
	double angle;

	/**
	 * Velocidade do objeto nos eixos X e Y;
	 */
	float speed;

	/**
	 * Velocidade máxima do objeto (módulo).
	 */
	float maxSpeed;

	Animation moving, firing;
	Sprite defending, hitted;

	unsigned myNumber;

};


#endif /* MOVINGOBJECT_H_ */
